package design.patterns.mementomode.narrowdemo;

/**
 * @Desc:   黑箱发起人角色
 * @author: cww
 * @DateTime: 2020-06-13 16:35
 */

public class Originator {

    private String state;

    public Originator(String state) {
        this.state = state;
    }

    /**
     * 工厂方法
     * @return
     */
    public MementoIF createMementoIf() {
        // 返回一个存储了发起人状态的备忘录
        return  new Memento(this.state);
    }

    /**
     * 使用备忘录还原发起人的内部状态，通过 Memento 的 getSavedState 取得
     * 之前存储的状态，这个 getSavedState 只有发起人自己能访问，外面的任何
     * 类无法访问
     * @param mementoIF
     */
    public void restoreMemento(MementoIF mementoIF){
        this.state = ((Memento) mementoIF).getSavedState();
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
        System.out.println("state="+state);
    }

    /**
     * 备忘录，作为发起人的内部类，实现黑箱的关键
     */
    private class Memento implements MementoIF {
        private String savedState;

        private Memento(String savedState) {
            this.savedState = savedState;
        }

        private String getSavedState() {
            return savedState;
        }

        private void setSavedState(String savedState) {
            this.savedState = savedState;
        }

    }
}
